package pkg

import (
	"github.com/spf13/viper"
	"log"
	"path"
)

func GetEnvConfig(rootPath string, rawVal any) (string, error) {
	env, err := getConfigEnv(rootPath)
	if err != nil {
		log.Fatalf("读取环境变量失败, %v", err)
		return "", err
	}

	v := viper.New()
	//设置配置文件类型，可选
	v.SetConfigType("yaml")

	// 本地环境
	v.SetConfigFile(path.Join(rootPath, "config", "config."+env+".yaml"))

	// 读取配置文件
	if err = v.ReadInConfig(); err != nil {
		log.Fatalf("读取配置失败, %v", err)
		return "", err
	}

	if err = v.Unmarshal(rawVal); err != nil {
		log.Fatalf("序列化配置失败, %v", err)
		return "", err
	}

	//监听配置文件改变
	//v.WatchConfig()

	//v.OnConfigChange(func(in fsnotify.Event) {
	//	//配置文件改变
	//	if err := v.ReadInConfig(); err != nil {
	//		log.Fatalf("v.ReadInConfig()%s", err.Error())
	//	}
	//})

	return env, nil
}

func getConfigEnv(rootPath string) (env string, err error) {
	v := viper.New()

	//设置配置文件类型，可选
	v.SetConfigType("yaml")
	v.SetConfigFile(path.Join(rootPath, "config", "env.yaml"))

	// 读取配置文件
	if err = v.ReadInConfig(); err != nil {
		return "", err
	}

	return v.GetString("env"), nil
}
